// 认证相关的工具函数

// 存储用户token的key
const TokenKey = 'user_token'
// 存储用户信息的key
const UserKey = 'user_info'
// 存储用户列表的key
const UsersKey = 'users_list'
// 存储是否首次访问的key
const FirstVisitKey = 'first_visit'

/**
 * 获取token
 * @returns {string|null} 返回存储的token或null
 */
export function getToken() {
  return localStorage.getItem(TokenKey)
}

/**
 * 设置token
 * @param {string} token 要存储的token
 */
export function setToken(token) {
  return localStorage.setItem(TokenKey, token)
}

/**
 * 移除token
 */
export function removeToken() {
  return localStorage.removeItem(TokenKey)
}

/**
 * 获取用户信息
 * @returns {Object|null} 返回用户信息对象或null
 */
export function getUserInfo() {
  const userInfo = localStorage.getItem(UserKey)
  return userInfo ? JSON.parse(userInfo) : null
}

/**
 * 设置用户信息
 * @param {Object} userInfo 用户信息对象
 */
export function setUserInfo(userInfo) {
  return localStorage.setItem(UserKey, JSON.stringify(userInfo))
}

/**
 * 移除用户信息
 */
export function removeUserInfo() {
  return localStorage.removeItem(UserKey)
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export function isLoggedIn() {
  const token = getToken();
  const userInfo = getUserInfo();
  
  // 检查token和用户信息是否都存在
  if (!token || !userInfo) {
    return false;
  }
  
  // 如果token中包含过期时间信息，可以进一步检查
  // 这里假设token可能是JWT格式，可以解析检查过期时间
  try {
    // 如果需要解析JWT，可以添加相关逻辑
    // 这里仅做简单检查，确保token和用户信息都存在
    return true;
  } catch (error) {
    console.error('登录状态检查出错:', error);
    return false;
  }
}

/**
 * 用户登录
 * @param {string} token 登录token
 * @param {Object} userInfo 用户信息
 */
export function login(token, userInfo) {
  setToken(token)
  setUserInfo(userInfo)
}

/**
 * 用户登出
 */
export function logout() {
  removeToken()
  removeUserInfo()
}

/**
 * 获取所有注册用户
 * @returns {Array} 返回用户列表
 */
export function getUsers() {
  const users = localStorage.getItem(UsersKey)
  return users ? JSON.parse(users) : []
}

/**
 * 添加新用户
 * @param {Object} user 用户信息对象
 * @returns {boolean} 是否注册成功
 */
export function register(user) {
  const users = getUsers()
  
  // 检查用户名是否已存在
  if (users.some(existingUser => existingUser.username === user.username)) {
    return false
  }
  
  // 添加注册时间
  user.registerTime = Date.now()
  
  // 添加新用户
  users.push(user)
  localStorage.setItem(UsersKey, JSON.stringify(users))
  return true
}

/**
 * 检查是否是首次访问
 * @returns {boolean} 是否首次访问
 */
export function isFirstVisit() {
  return localStorage.getItem(FirstVisitKey) === null
}

/**
 * 设置已访问标记
 */
export function setVisited() {
  localStorage.setItem(FirstVisitKey, 'visited')
}

/**
 * 验证登录状态 - 用于在切换路由或刷新页面时重新验证
 * @returns {Promise<boolean>} 是否通过验证
 */
export function validateLoginState() {
  return new Promise((resolve) => {
    // 首先检查本地存储中的登录信息
    if (!isLoggedIn()) {
      resolve(false);
      return;
    }
    
    // 在这里可以添加额外的验证逻辑，例如调用后端API验证token是否有效
    // 如果有专门的验证接口，可以在这里调用
    // 这里我们暂时返回true，表示验证通过
    resolve(true);
  });
} 